/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package co.edu.senaclem.persistencia;

import co.edu.senaclem.modelo.AsignaFichas;
import co.edu.senaclem.modelo.FichaTitulacion;
import co.edu.senaclem.modelo.Instructor;
import co.edu.senaclem.modelo.Programa;
import static co.edu.senaclem.persistencia.Persistencia.areadb;
import static co.edu.senaclem.persistencia.Persistencia.con;
import static co.edu.senaclem.persistencia.Persistencia.conectar;
import static co.edu.senaclem.persistencia.Persistencia.desconectar;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;

/**
 *
 * @author anfeles
 */
@Stateless
public class FichaTitulacionDAO implements IFichaTitulacionDAO{
    public static ResultSet resSet=null;
    
    @Override
    public void eliminar(FichaTitulacion fichaTitulacion) throws Exception {
        try {
            if (conectar()) {
                String consulta = "delete from fichaTitulacion where fichatitulacion='" +fichaTitulacion.getFicha()+"'";
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public void modificar(FichaTitulacion fichaTitulacion) throws Exception {
        try {
            if (conectar()) {
                String consulta = "update fichatitulacion set jornadatitulacion='" + fichaTitulacion.getJornada()+ "' where codigoprograma='"+fichaTitulacion.getFicha()+"'";
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public void insertar(FichaTitulacion fichaTitulacion) throws Exception {
        try {
            if (conectar()) {
                String consulta = "insert into fichatitulacion values('" + fichaTitulacion.getFicha()+ "','" + fichaTitulacion.getJornada()+"','"+fichaTitulacion.getCodigoPrograma().getCodigo()+ "')";
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public FichaTitulacion consultarPorId(int ficha) throws Exception {
        try {
            FichaTitulacion miFichaTitulacion = null;
            if (conectar()) {
                String consulta = "Select * From fichatitulacion where fichatitulacion='" + ficha + "'";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);

                if (resSet.next()) {
                    miFichaTitulacion = new FichaTitulacion();
                    miFichaTitulacion.setFicha(resSet.getInt("fichatitulacion"));
                    miFichaTitulacion.setJornada(resSet.getString("jornadatitulacion")); 
                    //se consulta el programa de esa ficha para traer el objeto Programa
                    IProgramaDAO programaDAO=new ProgramaDAO();
                    Programa miPrograma=programaDAO.consultarPorId(resSet.getInt("codigoprograma"));
                    
                    miFichaTitulacion.setCodigoPrograma(miPrograma);
                     
                }

                resSet.close();
                desconectar();
            }

            return miFichaTitulacion;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public List<FichaTitulacion> consultar() throws Exception {
        try {
            List<FichaTitulacion> fichasTitulacion = new ArrayList<FichaTitulacion>();
            if (conectar()) {
                String consulta = "Select * From fichatitulacion";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);

                while (resSet.next()) {
                    FichaTitulacion miFichaTitulacion = new FichaTitulacion();
                    miFichaTitulacion.setFicha(resSet.getInt("fichatitulacion"));
                    miFichaTitulacion.setJornada(resSet.getString("jornadatitulacion"));
                    //se consulta el programa de esa ficha para traer el objeto Programa
                    int codigoPrograma=resSet.getInt("codigoprograma");
                    IProgramaDAO programaDAO=new ProgramaDAO();
                    Programa miPrograma=programaDAO.consultarPorId(codigoPrograma);
                    
                    miFichaTitulacion.setCodigoPrograma(miPrograma);

                    fichasTitulacion.add(miFichaTitulacion);
                }

                resSet.close();
                desconectar();
            }

            return fichasTitulacion;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public List<FichaTitulacion> consultarDisponibles(Instructor instructor) throws Exception {
         try {
            List<FichaTitulacion> fichasTitulacion = new ArrayList<FichaTitulacion>();
            if (conectar()) {
                String consulta = "select * from Fichatitulacion model where model.fichatitulacion NOT IN(select model.fichatitulacion from Fichatitulacion model, Asignafichas a, Instructor i where a.fichatitulacion = model.fichatitulacion and a.documentoinstructor=i.documentoinstructor and i.documentoinstructor='"+instructor.getDocumento().getDocumento()+"')";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);

                while (resSet.next()) {
                    FichaTitulacion miFichaTitulacion = new FichaTitulacion();
                    miFichaTitulacion.setFicha(resSet.getInt("fichatitulacion"));
                    miFichaTitulacion.setJornada(resSet.getString("jornadatitulacion"));
                    //se consulta el programa de esa ficha para traer el objeto Programa
                    IProgramaDAO programaDAO=new ProgramaDAO();
                    Programa miPrograma=programaDAO.consultarPorId(resSet.getInt("codigoprograma"));
                    
                    miFichaTitulacion.setCodigoPrograma(miPrograma);

                    fichasTitulacion.add(miFichaTitulacion);
                }

                resSet.close();
                desconectar();
            }

            return fichasTitulacion;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public List<FichaTitulacion> consultarAsignadas(Instructor instructor) throws Exception {
        try {
            List<FichaTitulacion> fichasTitulacion = new ArrayList<FichaTitulacion>();
            if (conectar()) {
                String consulta = "select * from Fichatitulacion model, Asignafichas a where a.fichatitulacion = model.fichatitulacion and a.documentoinstructor='"+instructor.getDocumento().getDocumento()+"'";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);

                while (resSet.next()) {
                    FichaTitulacion miFichaTitulacion = new FichaTitulacion();
                    miFichaTitulacion.setFicha(resSet.getInt("fichatitulacion"));
                    miFichaTitulacion.setJornada(resSet.getString("jornadatitulacion"));
                    //se consulta el programa de esa ficha para traer el objeto Programa
                    IProgramaDAO programaDAO=new ProgramaDAO();
                    Programa miPrograma=programaDAO.consultarPorId(resSet.getInt("codigoprograma"));
                    
                    miFichaTitulacion.setCodigoPrograma(miPrograma);

                    fichasTitulacion.add(miFichaTitulacion);
                }

                resSet.close();
                desconectar();
            }

            return fichasTitulacion;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public void registrarFichas(AsignaFichas asignafichas) throws Exception {
        try {
            if (conectar()) {
                String consulta = "insert into asignafichas values(null,'" + asignafichas.getFicha().getFicha()+"','"+asignafichas.getInstructor().getDocumento().getDocumento()+ "')";
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public void retirarFichas(AsignaFichas asignafichas) throws Exception {
        try {
            if (conectar()) {
                String consulta = "delete from asignafichas where codigoasigna='" +asignafichas.getCodigo()+"'";
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }
    
    
    
}
